﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace Tlh.Common
{
    public static class Md5Util
    {
        /// <summary>
        /// 32位大写
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static string SiginMd5(string str)
        {
            MD5 md5 = MD5.Create();//实例化一个md5对像
            // 加密后是一个字节类型的数组，这里要注意编码UTF8/Unicode等的选择　
            byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str));

            return ToString(s);

            // // 通过使用循环，将字节类型的数组转换为字符串，此字符串是常规字符格式化所得
            // for (int i = 0; i < s.Length; i++)
            // {
            //     // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母，如果使用大写（X）则格式后的字符是大写字符 
            //     pwd = pwd + s[i].ToString("X2");
            // }
            // return pwd;
        }


        public static string GetMD5Hash(String input)
        {
            //return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(input, "md5");
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] bs = Encoding.UTF8.GetBytes(input);

            return ToString(md5.ComputeHash(bs));
        }


        private static string ToString(byte[] bytes)
        {
            return string.Join(string.Empty, Array.ConvertAll(bytes, (b => b.ToString("X2"))));
        }
    }
}
